/*
 * Copyright 2010 Kenny Chong (wongpeiling.com)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.wpl.ui.utils;

import javax.swing.SwingUtilities;

/**
 * Define a "SwingTask", which will make sure that the task will be run by the
 * AWT event dispatch thread.
 * 
 * @since 0.3
 */
public abstract class SwingTask {

	/**
	 * Execute the task.
	 * 
	 * @since 0.3
	 */
	public void execute() {

		if (SwingUtilities.isEventDispatchThread()) {
			swingTask();
			return;
		}

		SwingUtilities.invokeLater(new Runnable() {
			/*
			 * (non-Javadoc)
			 * 
			 * @see java.lang.Runnable#run()
			 */
			@Override
			public void run() {
				swingTask();
			}
		});
	}

	/**
	 * Swing's Task.
	 * 
	 * @since 0.3
	 */
	protected abstract void swingTask();
}
